From: Jasper St. Pierre Date: Thu, 26 Sep 2013 21:19:21 +0000 (-0400) Subject: app-system: Add back StartupWMClass matching X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~3063 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ad03fb081525b9461f694a7b1d8adbef9a0a99b0;p=gnome-shell.git app-system: Add back StartupWMClass matching While unfortunate that we still have to scan all apps with get_all(), support for this feature will be short-lived, so hopefully we can drop it in the future as new apps adapt to the desktop file / app ID recommendations. For now, simply scan all desktop IDs. https://bugzilla.gnome.org/show_bug.cgi?id=711631 --- diff --git a/src/shell-app-system.c b/src/shell-app-system.c index d9c57e0fb..feca09cf8 100644 --- a/src/shell-app-system.c +++ b/src/shell-app-system.c @@ -71,12 +71,37 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass) g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate)); } +static void +scan_startup_wm_class_to_id (ShellAppSystem *self) +{ + ShellAppSystemPrivate *priv = self->priv; + GList *apps, *l; + + g_hash_table_remove_all (priv->startup_wm_class_to_id); + + apps = g_app_info_get_all (); + for (l = apps; l != NULL; l = l->next) + { + GAppInfo *info = l->data; + const char *startup_wm_class, *id; + + id = g_app_info_get_id (info); + startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info)); + if (startup_wm_class != NULL) + g_hash_table_insert (priv->startup_wm_class_to_id, (char *) startup_wm_class, (char *) id); + } + + g_list_free_full (apps, g_object_unref); +} + static void installed_changed (GAppInfoMonitor *monitor, gpointer user_data) { ShellAppSystem *self = user_data; + scan_startup_wm_class_to_id (self); + g_signal_emit (self, signals[INSTALLED_CHANGED], 0, NULL); }